import Vue from "vue";
import Router from "vue-router";

Vue.use(Router);

/* Layout */
import Layout from "@/layout";

/* Router Modules */
import componentsRouter from "./modules/components";
import chartsRouter from "./modules/charts";
import tableRouter from "./modules/table";
import nestedRouter from "./modules/nested";

/**
 * Note: sub-menu only appear when route children.length >= 1
 * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
 *
 * hidden: true                   if set true, item will not show in the sidebar(default is false)
 * alwaysShow: true               if set true, will always show the root menu
 *                                if not set alwaysShow, when item has more than one children route,
 *                                it will becomes nested mode, otherwise not show the root menu
 * redirect: noRedirect           if set noRedirect will no redirect in the breadcrumb
 * name:'router-name'             the name is used by <keep-alive> (must set!!!)
 * meta : {
    roles: ['admin','editor']    control the page roles (you can set multiple roles)
    title: 'title'               the name show in sidebar and breadcrumb (recommend set)
    icon: 'svg-name'/'el-icon-x' the icon show in the sidebar
    noCache: true                if set true, the page will no be cached(default is false)
    affix: true                  if set true, the tag will affix in the tags-view
    breadcrumb: false            if set false, the item will hidden in breadcrumb(default is true)
    activeMenu: '/example/list'  if set path, the sidebar will highlight the path you set
  }
 */

/**
 * constantRoutes
 * a base page that does not have permission requirements
 * all roles can be accessed
 */
export const constantRoutes = [
  {
    path: "/redirect",
    component: Layout,
    hidden: true,
    children: [
      {
        path: "/redirect/:path(.*)",
        component: () => import("@/views/redirect/index")
      }
    ]
  },
  {
    path: "/login",
    component: () => import("@/views/login/index"),
    hidden: true
  },
  {
    path: "/auth-redirect",
    component: () => import("@/views/login/auth-redirect"),
    hidden: true
  },
  {
    path: "/404",
    component: () => import("@/views/error-page/404"),
    hidden: true
  },
  {
    path: "/401",
    component: () => import("@/views/error-page/401"),
    hidden: true
  },
  {
    path: "/",
    component: Layout,
    redirect: "/dashboard",
    children: [
      {
        path: "dashboard",
        component: () => import("@/views/dashboard/index"),
        name: "dashboard",
        meta: { title: "首页", icon: "dashboard", affix: true }
      }
    ]
  },
  // {
  //   path: "/documentation",
  //   component: Layout,
  //   children: [
  //     {
  //       path: "index",
  //       component: () => import("@/views/documentation/index"),
  //       name: "documentation",
  //       meta: { title: "文档", icon: "documentation"}
  //     }
  //   ]
  // },
  // {
  //   path: "/guide",
  //   component: Layout,
  //   redirect: "/guide/index",
  //   children: [
  //     {
  //       path: "index",
  //       component: () => import("@/views/guide/index"),
  //       name: "guide",
  //       meta: { title: "向导", icon: "guide", noCache: true }
  //     }
  //   ]
  // },
  {
    path: "/profile",
    component: Layout,
    redirect: "/profile/index",
    hidden: true,
    children: [
      {
        path: "index",
        component: () => import("@/views/profile/index"),
        name: "profile",
        meta: { title: "配置", icon: "user", noCache: true }
      }
    ]
  }
];

/**
 * asyncRoutes
 * the routes that need to be dynamically loaded based on user roles
 */

export const asyncRoutes = []
// export const asyncRoutes1 = [
//   {
//     path: "/company",
//     component: Layout,
//     // redirect: "/company/list",
//     name: "company",
//     meta: {
//       title: "Saas公司",
//       icon: "table"
//     },
//     children: [
//       {
//         path: "list",
//         component: () => import("@/views/company/list"),
//         name: "companylist",
//         meta: { title: "公司" }
//       },
//       {
//         path: "detail/:id",
//         component: () => import("@/views/company/detail"),
//         name: "detail",
//         meta: { title: "公司详情" },
//         hidden: true
//       },
//       {
//         path: "dynamic-company",
//         component: () => import("@/views/company/dynamic-company/index"),
//         name: "DynamicTable",
//         meta: { title: "Dynamic company" }
//       },
//       {
//         path: "drag-company",
//         component: () => import("@/views/company/drag-company"),
//         name: "DragTable",
//         meta: { title: "Drag company" }
//       },
//       {
//         path: "inline-edit-company",
//         component: () => import("@/views/company/inline-edit-company"),
//         name: "InlineEditTable",
//         meta: { title: "Inline Edit" }
//       },
//       {
//         path: "complex-company",
//         component: () => import("@/views/company/complex-company"),
//         name: "ComplexTable",
//         meta: { title: "Complex company" }
//       }
//     ]
//   },
//   {
//     path: "/dept",
//     component: Layout,
//     // redirect: "/dept/list",
//     name: "dept",
//     meta: {
//       title: "组织架构",
//       icon: "table"
//     },
//     children: [
//       {
//         path: "deptList",
//         component: () => import("@/views/department/list"),
//         name: "deptList",
//         meta: { title: "部门管理" }
//       }
//     ]
//   },
//   {
//     path: "/user",
//     component: Layout,
//     // redirect: "/dept/list",
//     name: "user",
//     meta: {
//       title: "员工",
//       icon: "table"
//     },
//     children: [
//       {
//         path: "userList",
//         component: () => import("@/views/user/list"),
//         name: "userList",
//         meta: { title: "员工管理" }
//       }
//     ]
//   }
//   ,
//   {
//     path: "/permission",
//     component: Layout,
//     redirect: "/permission/page",
//     alwaysShow: true, // will always show the root menu
//     name: "Permission",
//     meta: {
//       title: "权限",
//       icon: "lock",
//       roles: ["admin", "editor"] // you can set roles in root nav
//     },
//     children: [
//       {
//         path: "page",
//         component: () => import("@/views/permission/page"),
//         name: "PagePermission",
//         meta: {
//           title: "权限页",
//           roles: ["admin"] // or you can only set roles in sub nav
//         }
//       },
//       {
//         path: "directive",
//         component: () => import("@/views/permission/directive"),
//         name: "DirectivePermission",
//         meta: {
//           title: "非权限页"
//           // if do not set roles, means: this page does not require permission
//         }
//       },
//       {
//         path: "role",
//         component: () => import("@/views/permission/role"),
//         name: "RolePermission",
//         meta: {
//           title: "角色权限",
//           roles: ["admin"]
//         }
//       }
//     ]
//   },

//   {
//     path: "/icon",
//     component: Layout,
//     children: [
//       {
//         path: "index",
//         component: () => import("@/views/icons/index"),
//         name: "Icons",
//         meta: { title: "Icons", icon: "icon", noCache: true }
//       }
//     ]
//   },

//   /** when your routing map is too long, you can split it into small modules **/
//   componentsRouter,
//   chartsRouter,
//   nestedRouter,
//   tableRouter,

//   {
//     path: "/example",
//     component: Layout,
//     redirect: "/example/list",
//     name: "Example",
//     meta: {
//       title: "综合示例",
//       icon: "el-icon-s-help"
//     },
//     children: [
//       {
//         path: "create",
//         component: () => import("@/views/example/create"),
//         name: "CreateArticle",
//         meta: { title: "添加", icon: "edit" }
//       },
//       {
//         path: "edit/:id(\\d+)",
//         component: () => import("@/views/example/edit"),
//         name: "EditArticle",
//         meta: { title: "修改", noCache: true, activeMenu: "/example/list" },
//         hidden: true
//       },
//       {
//         path: "list",
//         component: () => import("@/views/example/list"),
//         name: "ArticleList",
//         meta: { title: "列表", icon: "list" }
//       }
//     ]
//   },

//   {
//     path: "/tab",
//     component: Layout,
//     children: [
//       {
//         path: "index",
//         component: () => import("@/views/tab/index"),
//         name: "Tab",
//         meta: { title: "标签页", icon: "tab" }
//       }
//     ]
//   },

//   {
//     path: "/error",
//     component: Layout,
//     redirect: "noRedirect",
//     name: "ErrorPages",
//     meta: {
//       title: "错误页面",
//       icon: "404"
//     },
//     children: [
//       {
//         path: "401",
//         component: () => import("@/views/error-page/401"),
//         name: "Page401",
//         meta: { title: "401", noCache: true }
//       },
//       {
//         path: "404",
//         component: () => import("@/views/error-page/404"),
//         name: "Page404",
//         meta: { title: "404", noCache: true }
//       }
//     ]
//   },

//   {
//     path: "/error-log",
//     component: Layout,
//     children: [
//       {
//         path: "log",
//         component: () => import("@/views/error-log/index"),
//         name: "ErrorLog",
//         meta: { title: "错误日志", icon: "bug" }
//       }
//     ]
//   },

//   {
//     path: "/excel",
//     component: Layout,
//     redirect: "/excel/export-excel",
//     name: "Excel",
//     meta: {
//       title: "表格",
//       icon: "excel"
//     },
//     children: [
//       {
//         path: "export-excel",
//         component: () => import("@/views/excel/export-excel"),
//         name: "ExportExcel",
//         meta: { title: "导出表格" }
//       },
//       {
//         path: "export-selected-excel",
//         component: () => import("@/views/excel/select-excel"),
//         name: "SelectExcel",
//         meta: { title: "Export Selected" }
//       },
//       {
//         path: "export-merge-header",
//         component: () => import("@/views/excel/merge-header"),
//         name: "MergeHeader",
//         meta: { title: "Merge Header" }
//       },
//       {
//         path: "upload-excel",
//         component: () => import("@/views/excel/upload-excel"),
//         name: "UploadExcel",
//         meta: { title: "Upload Excel" }
//       }
//     ]
//   },

  // {
  //   path: "/zip",
  //   component: Layout,
  //   redirect: "/zip/download",
  //   alwaysShow: true,
  //   name: "Zip",
  //   meta: { title: "压缩", icon: "zip" },
  //   children: [
  //     {
  //       path: "download",
  //       component: () => import("@/views/zip/index"),
  //       name: "ExportZip",
  //       meta: { title: "导出压缩" }
  //     }
  //   ]
  // },

//   {
//     path: "/pdf",
//     component: Layout,
//     redirect: "/pdf/index",
//     children: [
//       {
//         path: "index",
//         component: () => import("@/views/pdf/index"),
//         name: "PDF",
//         meta: { title: "PDF", icon: "pdf" }
//       }
//     ]
//   },
//   {
//     path: "/pdf/download",
//     component: () => import("@/views/pdf/download"),
//     hidden: true
//   },

//   {
//     path: "/theme",
//     component: Layout,
//     children: [
//       {
//         path: "index",
//         component: () => import("@/views/theme/index"),
//         name: "Theme",
//         meta: { title: "主题", icon: "theme" }
//       }
//     ]
//   },

//   {
//     path: "/clipboard",
//     component: Layout,
//     children: [
//       {
//         path: "index",
//         component: () => import("@/views/clipboard/index"),
//         name: "ClipboardDemo",
//         meta: { title: "剪切板", icon: "clipboard" }
//       }
//     ]
//   },

//   {
//     path: "external-link",
//     component: Layout,
//     children: [
//       {
//         path: "https://github.com/PanJiaChen/vue-element-admin",
//         meta: { title: "External Link", icon: "link" }
//       }
//     ]
//   },

//   // 404 page must be placed at the end !!!
//   { path: "*", redirect: "/404", hidden: true }
// ];

const createRouter = () =>
  new Router({
    // mode: 'history', // require service support
    scrollBehavior: () => ({ y: 0 }),
    routes: constantRoutes
  });

const router = createRouter();

// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
  const newRouter = createRouter();
  router.matcher = newRouter.matcher; // reset router
}

export default router;
